#ifndef __INF_74HC595_H__
#define __INF_74HC595_H__

#include "Common_Config.h"
#include "Driver_SPI.h"

typedef enum
{
    SHIFT_REG_CHANNEL_YT3  = 1U,
    SHIFT_REG_CHANNEL_YTR3 = 2,
    SHIFT_REG_CHANNEL_YT4  = 3,
    SHIFT_REG_CHANNEL_YTR4 = 4,
    SHIFT_REG_CHANNEL_YT5  = 5,
    SHIFT_REG_CHANNEL_YTR5 = 6,
    SHIFT_REG_CHANNEL_YTR6 = 7,
    SHIFT_REG_CHANNEL_YTR7 = 8,
    SHIFT_REG_CHANNEL_MAX
} ShiftRegChannle_e;

/**
 * @brief 初始化移位寄存器
 *
 */
void Inf_74HC595_Init(void);

/**
 * @brief 设置指定通道的使能状态
 *
 * @param channel   通道号（1-8）
 * @param state     状态（0：关闭，1：使能）
 * @return Status_t
 */
Status_t Inf_74HC595_SetChannel(uint8_t channel, uint8_t state);

/**
 * @brief 设置所有通道的使能状态
 *
 * @param state 状态（0：关闭，1：使能）
 */
void Inf_74HC595_SetAllChannel(uint8_t state);

/**
 * @brief 按照设定的占空比 使能或禁用 选择的通道
 *
 * @param useless           无用数据
 * @param channel           通道号
 * @param isComplementary   是否为互补通道
 * @param dutyCycle         占空比
 * @param isEnable          使能 or 禁用
 */
void Inf_74HC595_SetChannelDutyAndState(void *useless, uint32_t channel, bool isComplementary,
                                        uint8_t dutyCycle, bool isEnable);

#endif
